gusucode.com > 《MATLAB图像与视频处理实用案例详解》代码 > 《MATLAB图像与视频处理实用案例详解》代码/第 19 章 基于语音识别的信号灯图像模拟控制技术/voicebox/choosenk.m
function x=choosenk(n,k) %CHOOSENK All choices of K elements taken from 1:N [X]=(N,K) % The output X is a matrix of size (N!/(K!*(N-K)!),K) where each row % contains a choice of K elements taken from 1:N without duplications. % The rows of X are in lexically sorted order. % % To choose from the elements of an arbitrary vector V use % V(CHOOSENK(LENGTH(V),K)). % CHOOSENK(N,K) is the same as the MATLAB5 function NCHOOSEK(1:N,K) but is % much faster for large N and most values of K. % Copyright (c) 1998 Mike Brookes, mike.brookes@ic.ac.uk % Version: $Id: choosenk.m,v 1.4 2007/05/04 07:01:38 dmb Exp $ % % VOICEBOX is a MATLAB toolbox for speech processing. % Home page: http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This program is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 2 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You can obtain a copy of the GNU General Public License from % http://www.gnu.org/copyleft/gpl.html or by writing to % Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% kk=min(k,n-k); if kk<2 if kk<1 if k==n x=1:n; else x=[]; end else if k==1 x=(1:n)'; else x=1:n; x=reshape(x(ones(n-1,1),:),n,n-1); end end else n1=n+1; m=prod(n1-kk:n)/prod(1:kk); x=zeros(m,k); f=n1-k; x(1:f,k)=(k:n)'; for a=k-1:-1:1 d=f; h=f; x(1:f,a)=a; for b=a+1:a+n-k d=d*(n1+a-b-k)/(n1-b); e=f+1; f=e+d-1; x(e:f,a)=b; x(e:f,a+1:k)=x(h-d+1:h,a+1:k); end end end